iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
生成式 AI

從零開始,打造一個生成式 AI 平台,打破程式學習的高牆系列 第 13

思維鏈設計 3:透過 AI 分塊與索引整個程式碼

  • 分享至 

  • xImage
  •  

思維鏈設計 3:透過 AI 分塊與索引整個程式碼

https://ithelp.ithome.com.tw/upload/images/20240914/2016897914zJDQSXUa.png

前言

嘿,大家好!你有沒有過這樣的經驗:當你試圖閱讀一本巨著,比如《紅樓夢》或者《魔戒》系列,結果讀到一半就迷失在無盡的文字海洋中?這時候,章節目錄和摘要就成了你的指南針,幫助你在故事的迷宮中找到方向。

同樣的道理,當我們的 AI 需要處理大量程式碼時,它也會感到「迷路」。今天,我們要教會 AI 如何利用「分塊」和「索引」來像人類一樣更有效地理解和記憶程式碼。讓我們一起當 AI 的嚮導,帶領它穿越程式碼的叢林!

為什麼 AI 會「健忘」?

AI 的「金魚記憶」——上下文窗口限制

大型語言模型(LLM)就像一條金魚,牠的記憶只能維持短暫的時間。具體來說,LLM 有一個固定的上下文窗口,通常只能處理幾千個 tokens(字詞或符號)。當我們給它超過這個範圍的內容時,前面的資訊就像被沖走的沙子,消失在它的記憶中。

程式碼越長,AI 越「迷路」

當我們讓 AI 閱讀一個超長的程式碼檔案時,它就像在看一張超過自己視野範圍的地圖,無法同時關注所有細節,導致理解力下降。

解決方案:分塊與索引——給 AI 裝上 GPS

分段:不要一次塞一大坨

我們可以將大型程式碼按照功能、模組或邏輯段落進行分段。
AI 就跟人類一樣,一次看一堆文字也會感到困惑
透過分段、分塊能很好地提高 AI 的理解力

索引:建立地圖與路標

有點像是一本書的大綱
為每個程式碼塊建立一個索引或摘要,讓 AI 知道每個部分的位置和內容。這相當於給 AI 一張地圖,讓它知道在哪裡可以找到需要的資訊。

實作步驟

步驟一:將程式碼進行分塊

假設我們有一個大型的電商網站程式碼,我們可以按以下方式進行分塊:

  • 使用者介面(UI)模組
  • 後端 API 模組
  • 資料庫操作模組
  • 支付系統模組

步驟二:為每個塊生成摘要

接下來,我們需要為每個程式碼塊生成一個簡潔的摘要,描述其功能、輸入和輸出。

範例 Prompt:

請閱讀以下的程式碼塊,為它生成一個包含以下內容的摘要:
- 功能描述
- 主要函式或類別
- 輸入與輸出

程式碼塊:
[插入程式碼]

步驟三:建立索引與結構

將所有的摘要組合起來,建立一個清晰的索引,讓 AI 能快速定位。

範例索引:

  1. 使用者介面(UI)模組
    • 功能:負責呈現前端頁面,處理使用者互動。
    • 主要函式:renderHomePage(), handleUserClick()
  2. 後端 API 模組
    • 功能:提供資料給前端,處理業務邏輯。
    • 主要函式:getProductList(), processOrder()

步驟四:利用分塊與索引進行深入分析

有了清晰的索引,我們可以讓 AI 完成更複雜的任務,例如:

  • 找出程式碼中的潛在問題或漏洞
  • 優化特定模組的性能
  • 生成單元測試

具體的 Prompt:

根據以下的程式碼索引,請找出資料庫操作模組中的潛在 SQL 注入漏洞,並提供修復建議。

索引:
[插入索引內容]

提示工程:設計高效的 Prompt

明確的目標

確保你的 Prompt 明確指出需要 AI 完成的任務,避免模糊不清。

提供足夠的上下文

在 Prompt 中提供必要的索引和程式碼摘要,讓 AI 有足夠的資訊進行推理。

使用格式化輸出

利用 OpenAI 的格式化輸出功能,確保 AI 的回應符合預期的結構,方便後續處理。

總結

透過將程式碼分塊與建立索引,我們為 AI 裝上了「導航系統」,讓它能夠更有效地處理大型程式碼。結合 OpenAI 的最新格式化輸出功能,我們可以獲得結構化且可靠的回應,為後續的開發和分析打下堅實的基礎。

在下一篇文章中,我們將探討如何設計一個 AI 指揮官,統籌調度每一個步驟,讓我們的 AI 系統如同一支高效的團隊,協同作戰!


感謝你的閱讀!如果你對本文有任何疑問或建議,歡迎在下方留言討論。別忘了追蹤我的 Threads 和加入 Discord 社群


上一篇
思維鏈設計 2:設計 AI 生成第一個程式碼片段的 Prompt
下一篇
思維鏈設計 4:AI 指揮官,如何定義並調度每一步驟
系列文
從零開始,打造一個生成式 AI 平台,打破程式學習的高牆17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言